Next Generation Post Processing in Call of Duty: Advanced Warfare
カバー範囲
Motion Blur
Subsurface Scattering
Bloom
Motion Blur
Depth of Field
2レイヤーを使う (p88)
重なり云々とのバトル
前景と背景
カーネルの形 (p90)
Separableな手法はscatter-as-you-gatherアプローチには適さなかった
普通に49-tapで円形にサンプルすることにした
Brute force approach (p92)
各サンプルのCoCを見て、現在のピクセルとかぶっているかを見る
それが前景かどうかを見る
background → foregroundでソート
ここExpensive
アルファを各サンプルに$ a = \frac{1}{\pi c^2}で適用
ブレンディング
Our approach (p93)
backgroundとforegroundを2レイヤーに分ける
2レイヤーには分けるが距離に応じてスムーズに分ける
最短のdepthから100 inch遠くなったら完全にbackground
Overview
Tiling (p99)
Tile Max: 各タイルごとに最も近いdepthと最大CoCを求める
Tile Neighborhood: 3x3フィルタで近傍タイルから上記の情報を集める
Presort (p100)
各ピクセルごとにCoCを計算
bg/fg分け
R11G11B10で吐き出す
R: CoC
G: Alpha * Background
B: Alpha * Foreground
Main (p101)
2Dカーネルで収集してくる
フォーカスギリギリのピクセルがブリーディングしないようToeを実装しておく
アルファ (p102)
vec4( accumColor, accumWeight )
普通にadditive blending
scatter-as-you-gatherなのでnormalization忘れないでね
Missing Background (p103)
foregroundをちょっとデカ目にぼかす
当たり前だけどデカくなる。人が対象だと太る (p105)
far fieldではbackgroundは簡単だと仮定してデカ目にぼかさないようにする
Prefilter (p107)
Prepassにフィルタを噛ます (p109)
Mainのカーネルの間を縫うように
普通に9-tapのbilateral
それぞれのレイヤーごとにフィルタを噛ますべき (p110)
PostにMedianを噛ます (p112)
Upsample (p119)
Unity Builtin PPSv2のDoF実装がこれ。差異が結構ある Subsurface Scattering
Bloom